<?php
class Ordencompra extends AppModel {
	var $displayField = 'descripcion';
	var $name = 'Ordencompra';
	
	var $belongsTo = array(
		'Estado'=>array('className' => 'Estado','foreignKey' => 'estado_id'),
		'Proveedor'=>array('className' => 'Proveedor','foreignKey' => 'proveedor_id'),
		'Moneda'=>array('className' => 'Moneda','foreignKey' => 'moneda_id'),
		'Documento'=>array('className' =>'Documento', 'foreignKey'=>'documento_id'),
		'Ordencompraestado'=>array('className' =>'Ordencompraestado', 'foreignKey'=>'ordencompraestado_id')
	);
	
	var $validate = array(
		'id'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Verifique sus datos')),
		'documento_id'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Verifique sus datos')),
		'proveedor_id'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Verifique sus datos')),
		'moneda_id'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Verifique sus datos')),
		'estado_id'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Verifique sus datos')),
		'ordencompraestado_id'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Verifique sus datos')),
		'numero'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Numero: El sistema no le asigno un numero'),
						'maxLength'=>array('rule'=>array('maxLegth','20'),'last'=>true,'message'=>'Numero: Maximo 20 caracteres')),
		'igv'=>array('numeric'=>array('rule' =>'numeric','last'=>true,'message'=>'IGV: Ingrese un IGV')),
		'prc_total_sigv'=>array('numeric'=>array('rule' =>'numeric','last'=>true,'message'=>'Impuesto: El ingreso es solo de numeros')),
	    'prc_total_cigv'=>array('numeric'=>array('rule' =>'numeric','last'=>true,'message'=>'Impuesto: El ingreso es solo de numeros')),
	    'prc_igv'=>array('maxLength'=>array('rule'=>array('maxLegth','8'),'last'=>true,'message'=>'Impuesto: Maximo 8 caracteres'),
					'numeric'=>array('rule' =>'numeric','allowEmpty'=>true,'last'=>true,'message'=>'Impuesto: El ingreso es solo de numeros')),
		'gastos'=>array('maxLength'=>array('rule'=>array('maxLegth','8'),'last'=>true,'message'=>'Gastos: Maximo 8 caracteres'),
					'numeric'=>array('rule' =>'numeric','allowEmpty'=>true,'last'=>true,'message'=>'Gastos: El ingreso es solo de numeros')),
		'flete'=>array('maxLength'=>array('rule'=>array('maxLegth','8'),'last'=>true,'message'=>'Flete: Maximo 8 caracteres'),
					'numeric'=>array('rule' =>'numeric','allowEmpty'=>true,'last'=>true,'message'=>'Flete: El ingreso es solo de numeros')),
		'descuento'=>array('maxLength'=>array('rule'=>array('maxLegth','8'),'last'=>true,'message'=>'Descuento: Maximo 8 caracteres'),
					'numeric'=>array('rule' =>'numeric','allowEmpty'=>true,'last'=>true,'message'=>'Descuento: El ingreso es solo de numeros'))
	);
	
	function countOrdencompra($params){return $this->find('count',$params);}
	function dataOrdencompra($params){return $this->find('all',$params);}
	
	function getOrdencompra($id){
		App::import('Model', 'Detalleordencompra');   	$this->Detalleordencompra = new Detalleordencompra();
		$ordencompra = $this->findById($id);
		$ordencompra['Detalles'] = $this->Detalleordencompra->getDetalleordencompra($id);
		return $ordencompra;
	}
	
	function setGuardarOrdencompra($data,$variables){
	    App::import('Model','Serie');  $this->Serie = new Serie();
		App::import('Model','Detalleordencompra');  $this->Detalleordencompra = new Detalleordencompra();
		App::import('Model','Documento');  $this->Documento = new Documento();
		
		/** guardamos la orden de compra **/
		if(empty($data['Ordencompra']['id'])){ 
			/** agregamos una nueva orden de compra  **/
			/** pedimos la numeracion del nuevo documento **/
			$respuesta = $this->Serie->actualizarNumeracion('organizacion_id', $variables['Organizacion']['id'], null,$variables['Tipodocumento']['ordencompra_id']);

			if(!$respuesta['respuesta']) return $respuesta;

			/** Generamos el documento **/
			$documento = array('Documento'=>array(	'serie'=>$respuesta['serie'],
													'numero'=>$respuesta['numero'],
													'numero_serie'=>trim($respuesta['numero_serie']),
													'tipodocumento_id'=>$variables['Tipodocumento']['ordencompra_id'],
													'organizacion_id'=>$variables['Organizacion']['id'],
													'usuario_id'=>$variables['Usuario']['id']));	
		  	
			/** guardamos el documento que formamos **/
			$this->Documento->create();
			if(!$this->Documento->save($documento['Documento']))
			    return array('respuesta'=>false,'mensaje'=>'DOCUMENTO NO GENERADO', $documento);
			
			$data['Ordencompra']['documento_id'] = $this->Documento->id;
			$data['Ordencompra']['numero']=$documento['Documento']['numero_serie'];
			$data['Ordencompra']['ordencompraestado_id']=1;
			/** Eliminamos el id de orden compra pasado - ya que se esta agregando una orden compra **/
			unset($data['Ordencompra']['id']);
			$this->create();
		} 
		
		if(!$this->save($data['Ordencompra']))  return array('respuesta'=>false,'mensaje'=>'LA ORDEN COMPRA NO SE HA PODIDO GENERAR', $this->visualizarError($this->validationErrors));
		
		if(empty($data['Ordencompra']['id'])) $data['Ordencompra']['id'] = $this->id;
		
		/** guardamos los detalles de la orden de compra **/
		@$this->query("update detalleordencompras set estado_id = 2 where ordencompra_id =".$data['Ordencompra']['id']);
		
		foreach($data['Detalles'] as $detalleordencompras){
			//buscamos si existe el detalle
			$conditions = array('ordencompra_id'=>$data['Ordencompra']['id'],'articulo_id'=>$detalleordencompras['Detalleordencompra']['articulo_id']);
		    $detalleordencompra_db = $this->Detalleordencompra->find('first',array('conditions'=>$conditions,'recursive'=>-1));
		    
			$detalleordencompras['Detalleordencompra']['ordencompra_id'] = $data['Ordencompra']['id'];
			if(!empty($detalleordencompra_db)){
			    $detalleordencompras['Detalleordencompra']['id'] = $detalleordencompra_db['Detalleordencompra']['id'];
			    $detalleordencompras['Detalleordencompra']['estado_id'] = 1;  
			}else{
			    $this->Detalleordencompra->create();  
			} 
			
			if(!$this->Detalleordencompra->save($detalleordencompras['Detalleordencompra']))
			    return array('respuesta'=>false,'mensaje'=>'DETALLE ORDEN COMPRA NO GENERADO', $this->Detalleordencompra->visualizarError($this->validationErrors));
		}
		
		return array('respuesta'=>true, 'mensaje'=>"LA ORDEN DE COMPRA HA SIDO GUARDADA", 'ordencompra_id'=>$data['Ordencompra']['id'],'numero'=>$data['Ordencompra']['numero']);
	}
}